#include "RealizadorDeAtaques.h"
#include <list>

using namespace std;

RealizadorDeAtaques::RealizadorDeAtaques()
{
}

void RealizadorDeAtaques::realizarAtaque(Ataque* ataque, JuegoServerImp* juego) {
	
	validadorDeAtaques.validarAtaque(ataque,juego->getMapa());
	string colorEnemigo = ataque->getTerritorioEnemigo()->getEnPoderDe();
	Jugador* enemigo = juego->getJugador(colorEnemigo);
	unsigned int cantidadDadosEnemigo = enemigo->getCantidadDadosParaDefender(ataque->getCantidadDeDadosParaAtacar());
	std::list<Dado>* dadosAtacante = ataque->getJugadorAtacante()->tirarDados(ataque->getCantidadDeDadosParaAtacar());
	std::list<Dado>* dadosEnemigo = enemigo->tirarDados(cantidadDadosEnemigo);
	
	dadosAtacante->sort();
	dadosEnemigo->sort();
	
	for (list<Dado>::const_iterator it = dadosEnemigo->begin(); it != dadosEnemigo->end(); ++it)
	  {
	    if ((*it).getValor() < dadosAtacante->front().getValor())
	    	ataque->getTerritorioEnemigo()->quitarEjercitos(1);
	    else
	    	ataque->getTerritorioAtacante()->quitarEjercitos(1);
	  }  
}

RealizadorDeAtaques::~RealizadorDeAtaques()
{
}
